package com.eric.uniqueid;

import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.stereotype.Component;

/**
 * @ClassName:     ApplicationContextPrivider.java
 * @author         liuq
 * @version        V1.0  
 * @Date           2019年11月8日 下午5:19:59 
 */
@Component
public final class ApplicationContextProvider implements ApplicationContextAware {

		 /**
	     * 上下文对象实例
	     */
	    private static ApplicationContext applicationContext;
	 
	    @SuppressWarnings("static-access")
	    @Override
	    public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
	        this.applicationContext = applicationContext;
	    }
	 
	    /**
	     * 获取applicationContext
	     *
	     * @return
	     */
	    public static ApplicationContext getApplicationContext() {
	        return applicationContext;
	    }
	 
	    /**
	     * 通过name获取 Bean.
	     *
	     * @param name
	     * @return
	     */
	    public static Object getBean(String name) {
	        return getApplicationContext().getBean(name);
	    }
	 
	    /**
	     * 通过class获取Bean.
	     *
	     * @param clazz
	     * @param <T>
	     * @return
	     */
	    public static <T> T getBean(Class<T> clazz) {
	        return getApplicationContext().getBean(clazz);
	    }
	 
	    /**
	     * 通过name,以及Clazz返回指定的Bean
	     *
	     * @param name
	     * @param clazz
	     * @param <T>
	     * @return
	     */
	    public static <T> T getBean(String name, Class<T> clazz) {
	        return getApplicationContext().getBean(name, clazz);
	    }
	 
	/*class MyThread implements Runnable {
		public ISequenceService sequenceService;
		
		 public MyThread (){
			 this.sequenceService = ApplicationContextProvider.getBean("sequenceService")
		 }
	}*/
}
